1 module devisualization.util.opengl.function_wrappers.v20;
2 import gl = derelict.opengl3.gl;
3 import gldepcnst = derelict.opengl3.deprecatedConstants;
4 import devisualization.util.opengl.function_wrappers.v12;
5 
6 enum DrawBuffers {
7     None = gldepcnst.GL_NONE,
8     FrontLeft = gl.GL_FRONT_LEFT,
9     FrontRight = gl.GL_FRONT_RIGHT,
10     BackLeft = gl.GL_BACK_LEFT,
11     BackRight = gl.GL_BACK_RIGHT,
12     ColorAttachment0 = gl.GL_COLOR_ATTACHMENT0
13 }
14 
15 enum Faces {
16     Front = gl.GL_FRONT,
17     Back = gl.GL_BACK,
18     FrontAndBack = gl.GL_FRONT_AND_BACK
19 }
20 
21 enum FaceStencilAction {
22     Keep = gl.GL_KEEP,
23     Zero = gl.GL_ZERO,
24     Replace = gl.GL_REPLACE,
25     Incr = gl.GL_INCR,
26     IncrWrap = gl.GL_INCR_WRAP,
27     Decr = gl.GL_DECR,
28     DecrWrap = gl.GL_DECR_WRAP,
29     Invert = gl.GL_INVERT
30 }
31 
32 enum TestFunctions {
33     Never = gl.GL_NEVER,
34     Less = gl.GL_LESS,
35     LEqual = gl.GL_LEQUAL,
36     Greater = gl.GL_GREATER,
37     GEqual = gl.GL_GEQUAL,
38     Equal = gl.GL_EQUAL,
39     NotEqual = gl.GL_NOTEQUAL,
40     Always = gl.GL_ALWAYS
41 }
42 
43 enum ShaderTypes {
44     ComputeShader = gl.GL_COMPUTE_SHADER,
45     VertexShader = gl.GL_VERTEX_SHADER,
46     TessControlShader = gl.GL_TESS_CONTROL_SHADER,
47     TessEvaluationShader = gl.GL_TESS_EVALUATION_SHADER,
48     GeometryShader = gl.GL_GEOMETRY_SHADER,
49     FragmentShader = gl.GL_FRAGMENT_SHADER
50 }
51 
52 enum AttribDataTypes {
53     Float = gl.GL_FLOAT,
54     FloatVec2 = gl.GL_FLOAT_VEC2,
55     FloatVec3 = gl.GL_FLOAT_VEC3,
56     FloatVec4 = gl.GL_FLOAT_VEC4,
57     FloatMat2 = gl.GL_FLOAT_MAT2,
58     FloatMat3 = gl.GL_FLOAT_MAT3,
59     FloatMat4 = gl.GL_FLOAT_MAT4,
60     FloatMat2x3 = gl.GL_FLOAT_MAT2x3,
61     FloatMat2x4 = gl.GL_FLOAT_MAT2x4,
62     FloatMat3x2 = gl.GL_FLOAT_MAT3x2,
63     FloatMat3x4 = gl.GL_FLOAT_MAT3x4,
64     FloatMat4x2 = gl.GL_FLOAT_MAT4x2,
65     FloatMat4x3 = gl.GL_FLOAT_MAT4x3,
66     Int = gl.GL_INT,
67     IntVec2 = gl.GL_INT_VEC2,
68     IntVec3 = gl.GL_INT_VEC3,
69     IntVec4 = gl.GL_INT_VEC4,
70     UInt = gl.GL_UNSIGNED_INT,
71     UIntVec2 = gl.GL_UNSIGNED_INT_VEC2,
72     UIntVec3 = gl.GL_UNSIGNED_INT_VEC3,
73     UIntVec4 = gl.GL_UNSIGNED_INT_VEC4,
74     Double = gl.GL_DOUBLE,
75     DoubleVec2 = gl.GL_DOUBLE_VEC2,
76     DoubleVec3 = gl.GL_DOUBLE_VEC3,
77     DoubleVec4 = gl.GL_DOUBLE_VEC4,
78     DoubleMat2 = gl.GL_DOUBLE_MAT2,
79     DoubleMat3 = gl.GL_DOUBLE_MAT3,
80     DoubleMat4 = gl.GL_DOUBLE_MAT4,
81     DoubleMat2x3 = gl.GL_DOUBLE_MAT2x3,
82     DoubleMat2x4 = gl.GL_DOUBLE_MAT2x4,
83     DoubleMat3x2 = gl.GL_DOUBLE_MAT3x2,
84     DoubleMat3x4 = gl.GL_DOUBLE_MAT3x4,
85     DoubleMat4x2 = gl.GL_DOUBLE_MAT4x2,
86     DoubleMat4x3 = gl.GL_DOUBLE_MAT4x3
87 }
88 
89 enum ProgramObjects {
90     DeleteStatus = gl.GL_DELETE_STATUS,
91     LinkStatus = gl.GL_LINK_STATUS,
92     ValidateStatus = gl.GL_VALIDATE_STATUS,
93     InfoLogStatus = gl.GL_INFO_LOG_LENGTH,
94     AttachedShaders = gl.GL_ATTACHED_SHADERS,
95     ActiveAttributes = gl.GL_ACTIVE_ATTRIBUTES,
96     ActiveAttributeMaxLength = gl.GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,
97     ActiveUniforms = gl.GL_ACTIVE_UNIFORMS,
98     ActiveUniformMaxLength = gl.GL_ACTIVE_UNIFORM_MAX_LENGTH
99 }
100 
101 enum ShaderObjects {
102     ShaderType = gl.GL_SHADER_TYPE,
103     DeleteStatus = gl.GL_DELETE_STATUS,
104     CompileStatus = gl.GL_COMPILE_STATUS,
105     InfoLogLength = gl.GL_INFO_LOG_LENGTH,
106     ShaderSourceLength = gl.GL_SHADER_SOURCE_LENGTH
107 }
108 
109 enum VertexAttributeNames {
110     ArrayBufferBindings = gl.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
111     ArrayEnabled = gl.GL_VERTEX_ATTRIB_ARRAY_ENABLED,
112     ArraySize = gl.GL_VERTEX_ATTRIB_ARRAY_SIZE,
113     ArrayStride = gl.GL_VERTEX_ATTRIB_ARRAY_STRIDE,
114     ArrayType = gl.GL_VERTEX_ATTRIB_ARRAY_TYPE,
115     ArrayNormalized = gl.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
116     ArrayInteger = gl.GL_VERTEX_ATTRIB_ARRAY_INTEGER,
117     ArrayDivisor = gl.GL_VERTEX_ATTRIB_ARRAY_DIVISOR,
118     Current = gl.GL_CURRENT_VERTEX_ATTRIB
119 }
120 
121 enum AttribPointerSize {
122     One = 1,
123     Two = 2,
124     Three = 3,
125     Four = 4,
126     BGRA = gl.GL_BGRA
127 }
128 
129 enum AttribPointerType {
130     Byte = gl.GL_BYTE,
131     UByte = gl.GL_UNSIGNED_BYTE,
132     Short = gl.GL_SHORT,
133     UShort = gl.GL_UNSIGNED_SHORT,
134     Int = gl.GL_INT,
135     UInt = gl.GL_UNSIGNED_INT,
136     HalfFloat = gl.GL_HALF_FLOAT,
137     Float = gl.GL_FLOAT,
138     Double = gl.GL_DOUBLE,
139     Fixed = gl.GL_FIXED,
140     Int2101010REV = gl.GL_INT_2_10_10_10_REV, 
141     UInt2101010Rev = gl.GL_UNSIGNED_INT_2_10_10_10_REV,
142     UInt10F11F11FRev = gl.GL_UNSIGNED_INT_10F_11F_11F_REV 
143 }
144 
145 void glBlendEquationSeparate(BlendMode modeRGB, BlendMode modeAlpha) {
146     gl.glBlendEquationSeparate(cast(gl.GLenum)modeRGB, cast(gl.GLenum)modeAlpha);
147 }
148 
149 void glDrawBuffers(int n, DrawBuffers[] bufs) {
150     gl.glDrawBuffers(n, cast(gl.GLenum*)bufs.ptr);
151 }
152 
153 void glStencilOpSeparate(Faces face, FaceStencilAction sfail, FaceStencilAction dpfail, FaceStencilAction dppass) {
154     gl.glStencilOpSeparate(cast(gl.GLenum)face, cast(gl.GLenum)sfail, cast(gl.GLenum)dpfail, cast(gl.GLenum)dppass);
155 }
156 
157 void glStencilFuncSeparate(Faces face, TestFunctions func, int ref_, uint mask) {
158     gl.glStencilFuncSeparate(cast(gl.GLenum)face, cast(gl.GLenum)func, ref_, mask);
159 }
160 
161 void glStencilMaskSeparate(Faces face, uint mask) {
162     gl.glStencilMaskSeparate(cast(gl.GLenum)face, mask);
163 }
164 
165 void glAttachShader(uint program, uint shader) {
166     gl.glAttachShader(program, shader);
167 }
168 
169 void glBindAttribLocation(uint program, uint index, string name) {
170     gl.glBindAttribLocation(program, index, (name ~ 0).ptr);
171 }
172 
173 void glCompileShader(uint shader) {
174     gl.glCompileShader(shader);
175 }
176 
177 uint glCreateProgram() {
178     return gl.glCreateProgram();
179 }
180 
181 uint glCreateShader(ShaderTypes shaderType) {
182     return gl.glCreateShader(cast(gl.GLenum)shaderType);
183 }
184 
185 void glDeleteProgram(uint program) {
186     gl.glDeleteProgram(program);
187 }
188 
189 void glDeleteShader(uint shader) {
190     gl.glDeleteShader(shader);
191 }
192 
193 void glDetachShader(uint program, uint shader) {
194     gl.glDetachShader(program, shader);
195 }
196 
197 void glDisableVertexAttribArray(uint index) {
198     gl.glDisableVertexAttribArray(index);
199 }
200 
201 void glEnableVertexAttribArray(uint index) {
202     gl.glEnableVertexAttribArray(index);
203 }
204 
205 void glGetActiveAttrib(uint program, uint index, out int* size, out AttribDataTypes type, out string name) {
206     gl.glGetActiveAttrib(program, index, int.max,  cast(int*)null, size, cast(gl.GLenum*)&type, cast(char*)name.ptr);
207     name = name[0 .. $-1];
208 }
209 
210 void glGetActiveUniform(uint program, uint index, out int size, out AttribDataTypes type, out string name) {
211     gl.glGetActiveUniform(program, index, int.max,  cast(int*)null, &size, cast(gl.GLenum*)&type, cast(char*)name.ptr);
212     name = name[0 .. $-1];
213 }
214 
215 void glGetAttachedShaders(uint program, out uint[] shaders) {
216     int* count;
217     gl.glGetAttachedShaders(program, int.max, count, shaders.ptr);
218 }
219 
220 int glGetAttribLocation(uint program, string name) {
221     return gl.glGetAttribLocation(program, (name ~ 0).ptr);
222 }
223 
224 void glGetProgram(uint program, ProgramObjects pname, out int params) {
225     gl.glGetProgramiv(program, cast(gl.GLenum)pname, &params);
226 }
227 
228 void glGetProgram(uint program, ProgramObjects pname, out int[] params) {
229     gl.glGetProgramiv(program, cast(gl.GLenum)pname, params.ptr);
230 }
231 
232 string glGetProgramInfoLog(uint program) {
233     string ret;
234     int* length;
235     gl.glGetProgramInfoLog(program, int.max, length, cast(char*)ret.ptr);
236     return ret[0 .. $-1];
237 }
238 
239 void glGetShader(uint shader, ShaderObjects pname, out int params) {
240     gl.glGetShaderiv(shader, cast(gl.GLenum)pname, &params);
241 }
242 
243 void glGetShader(uint shader, ShaderObjects pname, out int[] params) {
244     gl.glGetShaderiv(shader, cast(gl.GLenum)pname, params.ptr);
245 }
246 
247 void glGetShaderInfoLog(uint shader, string infoLog) {
248     int* length;
249     gl.glGetShaderInfoLog(shader, int.max, length, cast(char*)infoLog.ptr);
250     infoLog = infoLog[0 .. $-1];
251 }
252 
253 string glGetShaderSource(uint shader) {
254     string ret;
255     int* length;
256     gl.glGetShaderInfoLog(shader, int.max, length, cast(char*)ret.ptr);
257     ret = ret[0 .. $-1];
258     return ret;
259 }
260 
261 int glGetUniformLocation(uint program, string name) {
262     return gl.glGetUniformLocation(program, cast(char*)(name ~ 0).ptr);
263 }
264 
265 void glGetUniform(uint program, int location, float[] params) {
266     gl.glGetUniformfv(program, location, params.ptr);
267 }
268 
269 void glGetUniform(uint program, int location, int[] params) {
270     gl.glGetUniformiv(program, location, params.ptr);
271 }
272 
273 void glGetVertexAttrib(uint index, VertexAttributeNames pname, double[] params) {
274     gl.glGetVertexAttribdv(index, cast(gl.GLenum)pname, params.ptr);
275 }
276 
277 void glGetVertexAttrib(uint index, VertexAttributeNames pname, float[] params) {
278     gl.glGetVertexAttribfv(index, cast(gl.GLenum)pname, params.ptr);
279 }
280 
281 void glGetVertexAttrib(uint index, VertexAttributeNames pname, int[] params) {
282     gl.glGetVertexAttribiv(index, cast(gl.GLenum)pname, params.ptr);
283 }
284 
285 void*[] glGetVertexAttribPointer(uint index) {
286     void*[] ret;
287     gl.glGetVertexAttribPointerv(index, gl.GL_VERTEX_ATTRIB_ARRAY_POINTER, ret.ptr);
288     return ret;
289 }
290 
291 bool glIsProgram(uint program) {
292     return cast(bool)gl.glIsProgram(program);
293 }
294 
295 bool glIsShader(uint shader) {
296     return cast(bool)gl.glIsShader(shader);
297 }
298 
299 void glLinkProgram(uint program) {
300     gl.glLinkProgram(program);
301 }
302 
303 void glShaderSource(uint shader, string _string) {
304     if (_string[$-1] != 0) _string ~= 0;
305     size_t length = _string.length;
306     auto str = _string.ptr;
307     gl.glShaderSource(shader, 1, cast(const(gl.GLchar*)*)&str, cast(const(int)*)&length);
308 }
309 
310 void glUseProgram(uint program) {
311     gl.glUseProgram(program);
312 }
313 
314 void glUniform(int location, float v0) {
315     gl.glUniform1f(location, v0);
316 }
317 
318 void glUniform(int location, float v0, float v1) {
319     gl.glUniform2f(location, v0, v1);
320 }
321 
322 void glUniform(int location, float v0, float v1, float v2) {
323     gl.glUniform3f(location, v0, v1, v2);
324 }
325 
326 void glUniform(int location, float v0, float v1, float v2, float v3) {
327     gl.glUniform4f(location, v0, v1, v2, v3);
328 }
329 
330 void glUniform(int location, int v0) {
331     gl.glUniform1i(location, v0);
332 }
333 
334 void glUniform(int location, int v0, int v1) {
335     gl.glUniform2i(location, v0, v1);
336 }
337 
338 void glUniform(int location, int v0, int v1, int v2) {
339     gl.glUniform3i(location, v0, v1, v2);
340 }
341 
342 void glUniform(int location, int v0, int v1, int v2, int v3) {
343     gl.glUniform4i(location, v0, v1, v2, v3);
344 }
345 
346 void glUniform(int location, float[] value)
347 in {
348     assert(value.length >= 1 && value.length <= 4);
349 } body {
350 	if (value.length == 1)
351 		gl.glUniform1fv(location, 1, value.ptr);
352 	else if (value.length == 2)
353 		gl.glUniform2fv(location, 1, value.ptr);
354 	else if (value.length == 3)
355 		gl.glUniform3fv(location, 1, value.ptr);
356 	else if (value.length == 4)
357 		gl.glUniform4fv(location, 1, value.ptr);
358 }
359 
360 void glUniform(int location, int[] value)
361 in {
362     assert(value.length >= 1 && value.length <= 4);
363 } body {
364     if (value.length == 1)
365         gl.glUniform1iv(location, 1, value.ptr);
366     else if (value.length == 2)
367         gl.glUniform2iv(location, 1, value.ptr);
368     else if (value.length == 3)
369         gl.glUniform3iv(location, 1, value.ptr);
370     else if (value.length == 4)
371         gl.glUniform4iv(location, 1, value.ptr);
372 }
373 
374 void glUniform(int location, uint[] value)
375 in {
376     assert(value.length >= 1 && value.length <= 4);
377 } body {
378     if (value.length == 1)
379         gl.glUniform1uiv(location, cast(int)value.length, value.ptr);
380     else if (value.length == 2)
381         gl.glUniform2uiv(location, cast(int)value.length, value.ptr);
382     else if (value.length == 3)
383         gl.glUniform3uiv(location, cast(int)value.length, value.ptr);
384     else if (value.length == 4)
385         gl.glUniform4uiv(location, cast(int)value.length, value.ptr);
386 }
387 
388 void glUniformMatrix2(int location, bool transpose, float[] value) {
389     gl.glUniformMatrix2fv(location, cast(int)(value.length / 4), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr);
390 }
391 
392 void glUniformMatrix3(int location, bool transpose, float[] value) {
393     gl.glUniformMatrix3fv(location, cast(int)(value.length / 9), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr);
394 }
395 
396 void glUniformMatrix4(int location, bool transpose, float[] value) {
397     gl.glUniformMatrix4fv(location, cast(int)(value.length / 16), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr);
398 }
399 
400 void glValidateProgram(uint program) {
401     gl.glValidateProgram(program);
402 }
403 
404 void glVertexAttrib(uint index, double v0) {
405     gl.glVertexAttrib1d(index, v0);
406 }
407 
408 void glVertexAttrib(uint index, float v) {
409     gl.glVertexAttrib1f(index, v);
410 }
411 
412 void glVertexAttrib(uint index, short v0) {
413     gl.glVertexAttrib1s(index, v0);
414 }
415 
416 void glVertexAttrib(uint index, double v0, double v1) {
417     gl.glVertexAttrib2d(index, v0, v1);
418 }
419 
420 void glVertexAttrib(uint index, double[2] v) {
421     gl.glVertexAttrib2dv(index, v.ptr);
422 }
423 
424 void glVertexAttrib(uint index, float v0, float v1) {
425     gl.glVertexAttrib2f(index, v0, v1);
426 }
427 
428 void glVertexAttrib(uint index, float[2] v) {
429     gl.glVertexAttrib2fv(index, v.ptr);
430 }
431 
432 void glVertexAttrib(uint index, short v0, short v1) {
433     gl.glVertexAttrib2s(index, v0, v1);
434 }
435 
436 void glVertexAttrib(uint index, short[2] v) {
437     gl.glVertexAttrib2sv(index, v.ptr);
438 }
439 
440 void glVertexAttrib(uint index, double v0, double v1, double v2) {
441     gl.glVertexAttrib3d(index, v0, v1, v2);
442 }
443 
444 void glVertexAttrib(uint index, double[3] v) {
445     gl.glVertexAttrib3dv(index, v.ptr);
446 }
447 
448 void glVertexAttrib(uint index, float v0, float v1, float v2) {
449     gl.glVertexAttrib3f(index, v0, v1, v2);
450 }
451 
452 void glVertexAttrib(uint index, float[3] v) {
453     gl.glVertexAttrib3fv(index, v.ptr);
454 }
455 
456 void glVertexAttrib(uint index, short v0, short v1, short v2) {
457     gl.glVertexAttrib3s(index, v0, v1, v2);
458 }
459 
460 void glVertexAttrib(uint index, short[3] v) {
461     gl.glVertexAttrib3sv(index, v.ptr);
462 }
463 
464 /*
465 bindGLFunc(cast(void**)&glVertexAttrib4Nbv, "glVertexAttrib4Nbv");
466 bindGLFunc(cast(void**)&glVertexAttrib4Niv, "glVertexAttrib4Niv");
467 bindGLFunc(cast(void**)&glVertexAttrib4Nsv, "glVertexAttrib4Nsv");
468 bindGLFunc(cast(void**)&glVertexAttrib4Nub, "glVertexAttrib4Nub");
469 bindGLFunc(cast(void**)&glVertexAttrib4Nubv, "glVertexAttrib4Nubv");
470 bindGLFunc(cast(void**)&glVertexAttrib4Nuiv, "glVertexAttrib4Nuiv");
471 bindGLFunc(cast(void**)&glVertexAttrib4Nusv, "glVertexAttrib4Nusv");
472 bindGLFunc(cast(void**)&glVertexAttrib4bv, "glVertexAttrib4bv");
473 bindGLFunc(cast(void**)&glVertexAttrib4d, "glVertexAttrib4d");
474 bindGLFunc(cast(void**)&glVertexAttrib4dv, "glVertexAttrib4dv");*/
475 
476 void glVertexAttrib(uint index, float v0, float v1, float v2, float v3) {
477     gl.glVertexAttrib4f(index, v0, v1, v2, v3);
478 }
479 
480 void glVertexAttrib(uint index, float[4] v) {
481     gl.glVertexAttrib4fv(index, v.ptr);
482 }
483 
484 /*
485 bindGLFunc(cast(void**)&glVertexAttrib4iv, "glVertexAttrib4iv");
486 bindGLFunc(cast(void**)&glVertexAttrib4s, "glVertexAttrib4s");
487 bindGLFunc(cast(void**)&glVertexAttrib4sv, "glVertexAttrib4sv");
488 bindGLFunc(cast(void**)&glVertexAttrib4ubv, "glVertexAttrib4ubv");
489 bindGLFunc(cast(void**)&glVertexAttrib4uiv, "glVertexAttrib4uiv");
490 bindGLFunc(cast(void**)&glVertexAttrib4usv, "glVertexAttrib4usv");*/
491 
492 void glVertexAttribPointer(uint index, AttribPointerSize size, AttribPointerType type, bool normalized, int stride, void* pointer) {
493     gl.glVertexAttribPointer(index, size, type, normalized ? gl.GL_TRUE : gl.GL_FALSE, stride, pointer);
494 }